{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to Sympy and the Jupyter Notebook for engineering calculations\n", "\n", "Sympy is a computer algebra module for Python. You are looking at the convenient [Jupyter Notebook](http://jupyter.org/) interface. This notebook aims to show some of the useful features of the Sympy system as well as the notebook interface.\n", "\n", "This notebook will use Python as the programming language. This means that most of what you learned in MPR can be applied in the notebook. The notebook interface provides \"cells\" where one can input code. To run the code, click on a cell and press Shift+Enter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A quick tour\n", "\n", "Take a second to go through the tour of the notebook interface by clicking on \"Help, User Interface Tour\". Also note that there is help available for a number of other things under that menu.\n", "\n", "Now that you are familiar with the nomenclature, let's run some code!\n", "\n", "*Evaluate the cell below to print out a message by clicking inside the cell and then pressing Shift + Enter*" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello\n", "World\n" ] } ], "source": [ "for word in ['Hello', 'World']:\n", " print(word)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "a = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Math in text boxes\n", "\n", "The text editor supports math in [$\\LaTeX$]() notation. You can double-click on a text box to see the codes used to enter it:\n", "\n", "$$f(a)=\\int_\\infty^0 \\frac{1}{a+2} \\mathrm{d}a$$\n", "\n", "Double-click on the formula above to see the code that produced it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Special symbols in variable names\n", "\n", "The notebook supports easy entry of special symbols in variable names. Simply type a backslash with the name of the symbol, then press tab to have it replaced by the symbol. For example:\n", "\n", "Enter `\\alpha`, then press tab. This will be replaced by α" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "α = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "## SymPy\n", "\n", "We need to import [the SymPy module](http://docs.sympy.org/latest/index.html) to get symbolic math capabilities." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [], "source": [ "import sympy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to start the pretty-printer to get nicely typeset math\n", "\n", "_Note that this changes somewhat based on the version of sympy_" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [], "source": [ "sympy.init_printing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to do symbolic calculations, we need to create a symbol" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [], "source": [ "x = sympy.Symbol('x')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJBAMAAAAWSsseAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarMolUmd1mIrvNRO9/G2jnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAQklEQVQIHWNgEFIWCU1gYChgMmJvYOBcwPSLeQIDCwP3AQYQ4FcAU/cXMAowSF+wZ2BlYMh3rGO4xsAgrsRWmcAAAFTiCzuMbuVxAAAAAElFTkSuQmCC\n", "text/latex": [ "$$x$$" ], "text/plain": [ "x" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sympy allows us to do many mathematical operations that would be tedious by hand. For instance, we can expand a polynomial:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASsAAAAVBAMAAADsjdXuAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMt0Qq5nNdrvviSJEVGY9pkAUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADt0lEQVRIDa2Vy2sTQRzHv+nudpNsXj4u1oMhvhAEV7T4uNQnerJBjSKoRERUBA1YETxoVRBfSLAnQTEeihAQgygIHsw/oOYigh6aiyCImFqpYqvrb+dhZrMxG8Q57Mz85pPv95uZyQbwtbyv4ilYZ4dSnkL7iVbeZLdf+beq2ej8Ob1kFjsTbNWAke4C6xp5ERArlIrmuxBLVq3xLrBuEe1kQCygp96FWML+r7FMLSiWebiLVIRE091x7anQfFeifE+svvPFMnIbaa1cTsnPry7Ikeif7DpPo5k2PRSMzRXSyh0hiRY7ZZ2Ga8/spaf7wZW7JgBrKTZwwKq3xtIWY04Fj6p6mhOk3HJprHV4WNU2nyA1BbMuSl70jxGdbrVrQbLQa1wIJsXqzeIyJ0Ll0R81PozVWa8XEc7iEMLDvLwmZf3iI7zkvW4jUgTOUawmhseY68Voz2+hxc5LJOrQ8lyIcWOkKJtFMVmLF1iXzCPaiMsiXXg7MSKIN7yPTECfYmoKZp2fscOL3bUxWPHZMUYIRYeh5ZVYR9kif3z4WuMDEWtgGOZ4b/EPEbo/VBEToUbHq9O50m4pWMRxGl6MrslgisVS7RgjhGLfbaOuxJrsO1WFdnpj3wOh5HbKbk0nD9yny7hqaHlZZGacUKNxD0WgWEHYMn6IPjspNPhtH4mREOO0yTruwMBQYTuz4w8Ry71bvwaOI1JD1tzieXVLNWBegakFYKFvf7GTQlHnmBrLAfbYH3Guss0fS7uN2T8HGjBGEhVzSq8rhFQDFnK1AKwny2P57KTQ26dOtblb+AJ8rqZwqWlpZDJLbmYy66jSf+bNeDKNxHQI4TzNRdueydzKZBawmUF+7BA7Yzmi3B++164plMhijH5O8hCxiGLVAdpjpYlDpIox0ZNHgl4LSTorpckvifdukdQ6Y+TKY/nshFDEhvVTiXXB3S3EprBCMW3G6h0Ou9sAvKpotkLIWPESnjG1zthbWPwF4bMTQgOkTdfoz269orulXdcbKCmmIlZ8BM9TMbpbxdXVQUQVADJWH3CSqXXEQiWYNjtEn53crQpwTYkVLml34uP9xVhNcRWxzPm4AVzFmtrYrD14oQAylrUwtzPN1Tphj3I5enW5d8tnJ2LFDiJR4EL6lS9bgNGdKW134fUn1VQeYnm0Sv/lufXoPx3fr+aWsXodx8lj690FhY7YCceZRHs7ue2zc/R2ZEJqEO9YxvJW1ZlUU2ttxsFYMNGUFX/VzYJv9NJXaVsIxnzEb4ZTTue3WvOaAAAAAElFTkSuQmCC\n", "text/latex": [ "$$16 x^{4} + 96 x^{3} + 216 x^{2} + 216 x + 81$$" ], "text/plain": [ " 4 3 2 \n", "16⋅x + 96⋅x + 216⋅x + 216⋅x + 81" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial = (2*x + 3)**4\n", "polynomial.expand()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice what happened - we defined a new name called \"polynomial\" and then used the .expand() method to expand the polynomial. We can see all the methods associated with an object by typing its name and a dot then pressing \"tab\".\n", "\n", "Call up the list of methods for the polynomial variable by entering \".\" and pressing tab at the end of the line in the cell below:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAaBAMAAADS/MaUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInZUiRDNmWbvRN27qzJGkhbKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABnklEQVQ4EY2SP0gCURzHv6ep55/TC4IagqRolCTaGgwSmqLDpUXyoKVRIrKI6KZagloachKC/tCQ0WBwNBS0NJTUXg42m4hr9u793pGFyr3B7+99fh/e434+wNHyOrKYNOFQDCQciqmMQzHKRbWnLbGuW7VEV7ynGIgCQ7DEKWBw/bmjPDD3BIwB1eTOLDw6pDIWCh1MTxYHcXg11hrR4DOgaPAftovntHE1kNEhZwH55Q1+wN+EUm8XJ2kTyCOiA0e0OwWUIpTvDiJDCQNYodYaj+AXUrGlpBiAOBEI3LLuPInk16LIul59RWK2GI69M7BL8IZHCbLqqisGMVtkV7M7pgnmrfBlEUZI52TLNI9N847X1neiRiUX96w6EiUCiBPDFYQawAXhZRbuGfQDV6pHIybETJOL4uoH1qsC4+nCB/rIs0/0l/nV+0TZx0ul3HYx8bmJk7+ibPA5rhK9BLytVktfHHVviDHaJ+Isxx4FrkkMVijbf3/Hw6gkhmv95/+XeBSE2auhdS+yWwzbjbRddMlHm0uGXXVMWSX8A7xwUpvdgXnZAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\left(2 x + 3\\right)^{4}$$" ], "text/plain": [ " 4\n", "(2⋅x + 3) " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get help about any method, we can type its name and append a ? at the end, then evaluate the cell\n", "\n", "Obtain help about the .expand() method by evaluating the cell below:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASsAAAAVBAMAAADsjdXuAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMt0Qq5nNdrvviSJEVGY9pkAUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADt0lEQVRIDa2Vy2sTQRzHv+nudpNsXj4u1oMhvhAEV7T4uNQnerJBjSKoRERUBA1YETxoVRBfSLAnQTEeihAQgygIHsw/oOYigh6aiyCImFqpYqvrb+dhZrMxG8Q57Mz85pPv95uZyQbwtbyv4ilYZ4dSnkL7iVbeZLdf+beq2ej8Ob1kFjsTbNWAke4C6xp5ERArlIrmuxBLVq3xLrBuEe1kQCygp96FWML+r7FMLSiWebiLVIRE091x7anQfFeifE+svvPFMnIbaa1cTsnPry7Ikeif7DpPo5k2PRSMzRXSyh0hiRY7ZZ2Ga8/spaf7wZW7JgBrKTZwwKq3xtIWY04Fj6p6mhOk3HJprHV4WNU2nyA1BbMuSl70jxGdbrVrQbLQa1wIJsXqzeIyJ0Ll0R81PozVWa8XEc7iEMLDvLwmZf3iI7zkvW4jUgTOUawmhseY68Voz2+hxc5LJOrQ8lyIcWOkKJtFMVmLF1iXzCPaiMsiXXg7MSKIN7yPTECfYmoKZp2fscOL3bUxWPHZMUYIRYeh5ZVYR9kif3z4WuMDEWtgGOZ4b/EPEbo/VBEToUbHq9O50m4pWMRxGl6MrslgisVS7RgjhGLfbaOuxJrsO1WFdnpj3wOh5HbKbk0nD9yny7hqaHlZZGacUKNxD0WgWEHYMn6IPjspNPhtH4mREOO0yTruwMBQYTuz4w8Ry71bvwaOI1JD1tzieXVLNWBegakFYKFvf7GTQlHnmBrLAfbYH3Guss0fS7uN2T8HGjBGEhVzSq8rhFQDFnK1AKwny2P57KTQ26dOtblb+AJ8rqZwqWlpZDJLbmYy66jSf+bNeDKNxHQI4TzNRdueydzKZBawmUF+7BA7Yzmi3B++164plMhijH5O8hCxiGLVAdpjpYlDpIox0ZNHgl4LSTorpckvifdukdQ6Y+TKY/nshFDEhvVTiXXB3S3EprBCMW3G6h0Ou9sAvKpotkLIWPESnjG1zthbWPwF4bMTQgOkTdfoz269orulXdcbKCmmIlZ8BM9TMbpbxdXVQUQVADJWH3CSqXXEQiWYNjtEn53crQpwTYkVLml34uP9xVhNcRWxzPm4AVzFmtrYrD14oQAylrUwtzPN1Tphj3I5enW5d8tnJ2LFDiJR4EL6lS9bgNGdKW134fUn1VQeYnm0Sv/lufXoPx3fr+aWsXodx8lj690FhY7YCceZRHs7ue2zc/R2ZEJqEO9YxvJW1ZlUU2ttxsFYMNGUFX/VzYJv9NJXaVsIxnzEb4ZTTue3WvOaAAAAAElFTkSuQmCC\n", "text/latex": [ "$$16 x^{4} + 96 x^{3} + 216 x^{2} + 216 x + 81$$" ], "text/plain": [ " 4 3 2 \n", "16⋅x + 96⋅x + 216⋅x + 216⋅x + 81" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial.expand()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to obtain help for a function by placing the cursor between the parentheses and pressing Shift+Tab" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, we can also factor polynomials:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAaBAMAAAD4TDc7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInZUiRDNmWbvRN27qzJGkhbKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABS0lEQVQoFWNgwA9YXe4G4FfBwMDOwL6BkBr+BYz/CKnhCCCshoGBBWSXAC6zIBKvAxgYmAxwqVkEkmA8CiRMsCrh2wrVLcvwkIE1AZua2LKvQOFUoDHn3pUysDegqFkB5TGB1LQzMHD+//+BgRNFCYMRshpOoHNBYBmEgpEoatgaIMIlQCpIN84F6jsUNSwXIGoygFQB0yVYrKCo4UiAqNnMwMAhwPSRtwHCRVHDvAEiOIuBgY+BJwHMqd69e+bu3XtBbLC/+D6AhRmAahgY+BUgHAZUf3FNgAgng6j1AqwBEC5Wuw4xMMQsuM/AAlGCag7HAYioLwOD/dNKhsXY1LArQERXMzCEKzFXGKCq4T35+xIDA7cARJT7AVQWQsHcA+ZJQ6U4ClDUwOIULFgBkzoIY2DQjAdgQjEwBgbNAw0PYCpqwJCECjRCaQAIoUYOroJN4AAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left(x + 1\\right)^{2}$$" ], "text/plain": [ " 2\n", "(x + 1) " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x**2 + 2*x + 1).factor()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculus\n", "\n", "Sympy knows how to integrate and differentiate" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "eq = sympy.tan(sympy.log(x**2 + 1))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPkAAAAxBAMAAADq2hJ6AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpnNuzKriUQQ7912ZlSugimNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEvUlEQVRYCeVXXWgcVRT+9mcmu9nNZg3qg4hdjKRaKATRN6UrmAX7IC1GRINkEGkFQ10UGvrUffLRLME/UGgULAURt3koaBQWHyJKoEGKD5KHRcQXhSTFUNso6znnzr1778xs9WmK9MCee873nbPfztyZ2TlAxCqtCFBcPNEWKMYQqjFT5DSPcCbOgSVpxiFCfo6iWWQ7gsUYq9oUOd1enVJxDizJbBwCitNRdLyV2WMszliYLoo0b3EuLkIAY12BJiZnLCq/aSUSjrWVOjHPnI+QploXWfxcGyjRRzmLoNPxBaX8QSbA2RYHyu6hJbpTIx3mmLnEgWWMhaaKdIbiS0dIuRwQIM4QFLw7eZ38OkN+G6MrHCg7SMuETsKVjwJgphEiemEsNFUEFDZD4DJ1FVlGHIOGKjN8jr919Dr8XeaU/UnLNzpRa+YpWZmJqjOmLCyiu6AbIqyOxzkRR6uhRD3HP9PvwJeriuvg0a/yrkpo3N04HjK2elVjqk4VUWwkRP0BZsXZlKhn6wSRlXbw4fo7iz0Kyx3g1/0TPWx9ewZzH9+73kVm5tmHQobVlzceBN48vfWbxqQ1LCLMVf+eEIizKVEvrzAHzHdRKy/IXe1PU75K3/ERJoHzXW8Xo/3+DoHCNOBdRL5LZ+izgsakNSwizFVfahMkzqZEvcCbT7aKsWp519+kMF+XnNWXqjgK/E25mDANlJrw9mi3XmWQMdMqVVH1+WMEi6PV/DBR99R+Z2vwkJ+W7lxACx078P7ZKp4E/uKYLReQa2C+B1zT6oyZVqKRXVv78tO1NYIB2fcDLYrE2ZSoZ9Ql+wPXjnfZo1Qjx+rLp7ZddWEa2G4Bf9BJ+5pqVLVuZYDMHKCon2sRJM6mRL0o6pUm7qC9qRZ5i3IBuVU0Kxcw76oLo479anHqNG8TBNOtDJC56gf4zIuzKXXscuafA757u/WaesLlAqp6GM3RGpbuqiaceSIKe5UWVZHlAsC0Us7mqtMh0L6zIzOU2nd+ymRW75/qbD9/CG9xgV8n9waa4zVcfrH6iLXvwtA1/wlyzcKjx9u62rQyQGYk5MzL5S7OpkRdrvlcv9+fXt6oHO5xr9yE/smqt/D7e4/N3pi5sh8wTMbM7I0nMLH4CnCkv98NMdNKOZtWf/nzS13gJ4bEWZR/dH+BbpYV5hzTN6EDSmIz+V7xvq8ItTHdodVVPsWLOFpdKhsw59oFN7Uyi/mF4CtMWZiuNH8lAsgjXhylLiXPed0Vrta/1nDmg2PA00wPr1bN7n+c+4XyH+dCeCGSD1KLKS5uvE4/ADepVn1jAa3iVG77H+0kjP1eAihQEpOE2f2lKmXibFTFF+NQ4tubKrvpe13CNzH07+91kcakN1dVksQkYYMvzNQpFjfAdHSnDpxVP8ccUJIkJgkbdI60KRY3wHR0Rge37UoP2ltmO7ftWf+/HnjyxJzW0SRPzGmpJ0zMMpimox+fmNVgmo46PUA7Ssm8MsjLWlrqc/wMJzOvS2mqxyfmdNTVuBufmNNRl5k1YWJORV3NrAkTcyrqQ2fWVNTNuKsu+dSv+XDcvSXqQ2fWVM780Jk1FfVhM6saTMPtSG0xT9rUFG0h8y9jg/81/gfzRuSfiqe4VwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{2 x \\left(\\tan^{2}{\\left (\\log{\\left (x^{2} + 1 \\right )} \\right )} + 1\\right)}{x^{2} + 1}$$" ], "text/plain": [ " ⎛ 2⎛ ⎛ 2 ⎞⎞ ⎞\n", "2⋅x⋅⎝tan ⎝log⎝x + 1⎠⎠ + 1⎠\n", "───────────────────────────\n", " 2 \n", " x + 1 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq.diff(x)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAaBAMAAAC6D0SsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEIl2mUSrVGbNuyLvMt2wmzq1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB/UlEQVQ4EZVSPUgbYRh+krucZ+4uHtYpKBEtXRsVUsdQ02pBJIPQFooKXboUg+7mBhddvNKhgotSOolwlE666JCtw+ngagZphUKodFAqcn2/n+TMGQr3wsc9P+9z933vfUCMMsYLfox2QBtUDmMFLD/pxgoAGSdeQPl4t9+7S+5hgyvZfGgolRB3QCneat0CvaPPuL8EfHux16EV+PrwC/AE6PeNa6AIjb074cJYwONyh0SiiI0Kum1kbP0IusN6AdWBZsM8JNiqVwIpV8i50IuwhgsektsiYALmJbSbVjeBZUFSNfTQO48k+2urDsHX9CPr0OhQYckACVUH2JTG4p9Jhp5ymvmNB4WBoYrwWoHUBQmPhIhksMWQyJ/lUVTeqnXhNQNW4T0Ja0LE0n5QJviT03PonnKjOcJrBmhL9M0VIdLhq+w4NUZVmgTSLndmGo3vjcYPjtk8cCahDeOKIA+sMq0nL5zWlCwfaWp5I+QcPd7R+kSraxAHwLyXsIUnt5S75AG5JdMDdsn/TOsEGMmWF5EU/c3/YC7wLa0LNfUBOtsDDc04Lz2vV4+n8bI9QJeB/YcJqZ6W+OWbA7qDIHD7xrqmKu0BzJbo8uGXVOUj47dzxsKxEjHqTAqLxnuv5OUTuupEfHby/9V+1MxGhQjfiXAYTlRp4zqNn9U/WClr0LcE27cAAAAASUVORK5CYII=\n", "text/latex": [ "$$8 \\left(2 x + 3\\right)^{3}$$" ], "text/plain": [ " 3\n", "8⋅(2⋅x + 3) " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial.diff(x) # First derivative" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAAAaBAMAAACtLdRlAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndq3ZmzYkiRO+7EFRAb64nAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACMElEQVQ4EZ2TPWhTURTHf2nzXvPymqZ+IDpIQ/yoKEpoiuAiFaK4NUMFFyW4uAhmCIKDEsShm0FUFDoEFR0EdXCqCHbooCBEQXAo5IEI3VIHh2Lb57n3vtd8EogHbt45/3N+7953zwkMaon5XG1QBoYYygxOJavO78Epu/Y/FMS6Tljpu7mjs7s6b8Py+lLxvKSdL7pmJ/y4eFS7q3B/cqkn+fjOZ7gsqQfsUwXTkCLqiZco4sxwrypupyVSXPcYqeEs7TguSWsau6AA6UWBaA33bSvywgTWFvUidgrX99dE2lMi9tFQLribRNdbqV8miC+SlBd/CFPlEvGNmmwDLyGaIdrWxYCSbENKbshTmVUpweyfE8o/on4YXuP73Nd5TwdsU/GTItw1Io8QKubfVKF500SelHU2nLaQisydkYqrAVVW1OqCX5X4tNamsCvWerSgg+ZeNDz4aUS7IpRcTUN956LShlJEGFVXCgey2ffZrLRGmVwUE8Z9iFCutGFLYk1dUYlk3qQJ94qMMyolr4z8PJf7e74u/jlZt2WNlXkCbyqJmikIvqu+qanghJJ6h1uBT+Ity9oLl1aqs8QMFO7lzugTXgtU2CB+C1sdSe7VmUofzDT2H+N1O2UXdL8OhdSkv8zutJ7eZzDi+37x24Wxw147xdO0TC+nQqrlOTzeEgRu8F0mcjLdBaoDXRZMr9H13HWVqCvpZws9kys91aZo/sbN2HhOoVNpi2WQtP0DdnuCFd7wB3sAAAAASUVORK5CYII=\n", "text/latex": [ "$$48 \\left(2 x + 3\\right)^{2}$$" ], "text/plain": [ " 2\n", "48⋅(2⋅x + 3) " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial.diff(x, 2) # Second derivative" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAATkAAAAuBAMAAACha3NVAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMt0Qq5nNdrvviSJEVGY9pkAUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEt0lEQVRYCe2Xz4tbVRTHv5mXNMl7Lz+qrqrgkHZjQSe2Fm1d5NXOoFhxwkgQsdqoCAXRCbY6qItGBQV1ETsu7GpmYweCQigtVhA7/0CnARGhLmZWVhFhSqVTOp3Gc3+9H/dZXloQ78K7SO4953PP+7wfSU4AbThfLy1qIYOW7tx2g2x0FbesR0xau/f8aJIO7qiSTrcrr5m7/6G+OXrWxDTZnVxMjyqn1KqamfB+lOxeRa4tXAqwrptgpRzIrnBZLVAqO+v+woAJ2W3q+B42sp6/MGBCdqWXFg4ADx95sNu3FroGOAUKZFd7A/k+6tnHM6NB3IwZs1tFZrbYy66nV8xwCizYnR1F8XoKuWYQNWVGdiNNFG8ApdaQTkln8e3FvUNUsrrj9GWWMMgux64dcL5nJeNULbuaUPJJvJNAsHQGQzzmZOfSc9d5ZHES9hBFgXNJdptxYohCpUXnUiJGdvgEu/vLdz6Hc4k0AdbhJDvggSEKFavJdk/MbWvBbuzFrpnCi/0hiiJr6XY/0AlGxtutyPJmC3v0Zpnh407jUJnoVF1u+SVmtzwYDDoS45D1sV6edUL2wvPAnnfpi18O3h6pBXsXyVg4jOjzU7BZYzDi0QsNZyVmd2KiMdWXmIDuZecTDNEJvY4dPdSR7suE82FAiBlLClbPxNdLIrQPOE6zNz2xTHW/uibruysiVAdOQ2IUsT7HWZmRJQB6uoujsNvFFVhNiHEKd8uZxGSSfRKSx88CmatisofUr57a4aiWptASIZL1IDAe2Irf5QFkCW6X86gZstuwmhyC8/7mZ8QMEpPJW7J7DJgsw97kyVL47S/SYUPZ0SNVhsB4fMvMfv4OdVhuV6rD3XCvVjMrIpkfDFajmEzekh1VGAPeIztrZt+Wb2RB9hbYneHRsRgRvnY1sruBybUXZDsUKqQwnmRPgWiYQkR8qvYgtUafBbLL4EhrKsQFdk+xKGE64ZegI56dZ4Q9eA2xdkhhPMntkhsmtQcjdfoVIbs/cLT39D/ZOfwWEaYTfglpdw0XzgwWY+2QwlhSfIJEw0TfVPHBBKYqleOVyjbu0gAdluzK+Iiv+UumUrnvWKXisYXdZK+ERYhwCbKrzcNdK9axPBtthwKMJ7ldlGDFY0OdEW1yWswOWItA/p0daVOcMBpRQpVgd4s+FYWNfBXORqwdkphMEhsjWOnoUKUvwPl+fHzyCzr3dewMMb5dzaMoYT2dUCWYHf3tK16uEUgPh9YOSUwmuZ1GhI4qp3JPah5ZOpu8Z32WXsV8iPPtztNlY9hOnQjbFTvINPM94NNYOyQxnuR3NkaEjhq1O9lo0HcZSu3CpV0dtx/ifLvlefrHTliMCNvhfuwuu6+g2Iq1QxLjSW6nESng0dBx+VTumR4MrlCvOH318LOtn/4MQ77dd+TMMEsnlB3vhPbMUMt8V+NAvB1SGEuCsVrDlL/y8tbwgdlc7dHj/tq38yP6JLGE2JCEjYxtr+qll/SAvlZdgB4P1oklBJqEpYOKBs7+t7v9m5K++Fb59nf/2ztzVYe15+aOD8xVI7ODPWP1qDU6aO6Dd4z+PBh76Vjr8aW5dqeRnTXXzmlMxH5n/3PbvwGyNGq8B17+1AAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{16 x^{5}}{5} + 24 x^{4} + 72 x^{3} + 108 x^{2} + 81 x$$" ], "text/plain": [ " 5 \n", "16⋅x 4 3 2 \n", "───── + 24⋅x + 72⋅x + 108⋅x + 81⋅x\n", " 5 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial.integrate(x) # indefinite integral - note no constant of integration is added" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqBAMAAAA37dRoAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiTIi3USrzZm7VBDvdmaluOHpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABOklEQVQoFWNgYBAUVGDYeLGVAQg0gFhlA4hlEsDmwNDAwLYAyHZj4M6oB4tWMHBO4HvAwF3AwMDrBpS5DxLl+g0kGCeARfXKYKLsB4As1p8bOB4wMAjARfmLZIEW5f/tAhpgABfdX8fAs4CB8X8xA4MdA0L0AwPHaYaFlv8DGAQQovwODHxf+RoY1p/mM0CIshQw8P3j2cDA/MuWASHKCVK7H+iOvLC0tD+JUPeyAs09wGPAwDAZKHMMiMG+YJjIsGcBazUD3wWgyE+4KGNHEgODWgcodNr/z2XIPO8Gkh9i4D82QHs/KDBwA0MZHZwvd9mALsbA4PJFGlOQIQGLGANJonl3m7CYMZvBPgCLMAMwwWABHJ8xBDkLGDg+YYjyODCwfcAQZWRg4JmAIcrcwHAHSzhYtHXDlQIA3eVupAuNLKwAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{6841}{5}$$" ], "text/plain": [ "6841/5" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "polynomial.integrate((x, 1, 2)) # Note that integrate takes one argument which is a tuple for the definite integral" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Limits\n", "\n", "We can evaluate limits using SymPy, even for \"interesting\" limits where we would need L'Hopital's rule" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "badeq = (2*sympy.sin(x) - sympy.sin(2*x))/(x - sympy.sin(x))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKQAAAAyBAMAAAAgpG0sAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpnNuzKriUQQ7912ZlSugimNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADJ0lEQVRYCe2WPWhTURiG35s0aX6aEBUEqUKI4KJChi5OVrSiThkKHRzsWkppwF2zCdIhWJcOQnDoUBBDQRcHr0tFqD8VR5HgIohDqwb8qcTv3Ht+vnvvybUJjj1D8p7ve743uTe5hxfosxxZL/Xp67ICvUIs/UrOLOnZPkKBXtunDx6fkrDzwEwV61KPdUxRqRDoVCZqnHZmcbPhFzJf1QywrOUZrbQIgYcx+kP1BJ1uIteShaZqAKe1fKuVEUFwDlhTPUHnfiK9owrmvaVljs3rohEEPmxisSQrgk63ke4aQqpMVZeSb7S0CAHOA4s12ZN0fhtIvdysHlrF1ftHN1zqJupAdnNu5gYwOkt7sywgNZ+G6GsucBdo4zGw6qbEbRAflsCGexIoVI0fKQtIX2g3RK8TebuJOi4CV4A/tM13gC28Li0AxTbtzbKAhJeDdKJMA/nvzyAsLwC7tM01gBrOk0Jqm16Wn4j1iJQFBCpBGt6/JHu9Vw5Z+ubItMjILBtYKIu++Co+Tc/JAeAI7nWZZbIj2jtYiVy4DfwEp8TpGeAF8AVYYJYjLrKX0tt0f1GYJHezoiBSdYytMNpZr5ygH+BzE+fEjZzwL4D+OcXunVamQz+8a/xIRUGMVyrznE72er0qcOv988b02uXpX1Pvfs/SNbeRPeV+/EAe+VLAMgribK/3rQ/NR8WP669xJezvBvT6MbQ5LMwBYvU0oNeOoUfU5TqTVidd1KBXiaOzymmkqaetQoNeN5Y+Jg22rEasqECv9E+aDe7LPdwBenj+89rDh+4j5g6oaKWeWtMZWqlotTS0gxgMRSvfa6zjvw/3GopW0sSSwQawZyeSORRDp+UAdiG0pfc59kG6OITYcwbT3jJe6f0AGYzNBKSMV6xmiVb2DMZmAlLGK1azRCt7BmMzASnjVXy04hksMN1n4wUm1rNFK5aqGNlP+vGKdW3RyprB2AyXKl6xWjRaKSiUwdgMlyowsVo0WikolMHYDJcqMLFaNFopKJTB2MyA0kSrmFQ1mKc5LMwBMphDhNbRKi5VRaZiCzpaxaaqWItIU0Ura6r6C/KrcI6TVc37AAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{2 \\sin{\\left (x \\right )} - \\sin{\\left (2 x \\right )}}{x - \\sin{\\left (x \\right )}}$$" ], "text/plain": [ "2⋅sin(x) - sin(2⋅x)\n", "───────────────────\n", " x - sin(x) " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "badeq" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "a = sympy.symbols('a')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [], "source": [ "lim = sympy.limit(badeq, x, a)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMQAAAAyBAMAAADxQ2lcAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMiKZu6uJRO92ZlRfaCDxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAECUlEQVRYCe1WS2sTURg9k3SaNDFpKIKKSCMuXPgqRIsiaEBEBKVR8QEqBItiwWIqFYUWmh9QIYgLEcWiK2mL7UIrijCKgkKVoKibQgviQnRhUSs+43cz986905lMEqM7P5i553vPfczMASoV3Qzkg0dWSvGpWDGXgE9Ne8go4RfmOVMC0TikYAXuOdTNNf2uNEdzHPNW0kNof16qbwFZwdbPitGzuDxgaqEZy4omAX0xgeR4PW1hLQ6lAhZbDgUEYwiPcF2p1ilCImmOhoUF0CSsz0Ot8FJ6JApPI/hZqgKJrsAoN70XLtsYBtQKYeUprbhgC4KfLE2AUFwgrODIvcUVQK3gy1t5NuD/ANQ9GY/vvIVNNw88MshZn6PbnosH6H6eLia8xbaJ+/qybN36w+P9zNrBbqAKesdDA2jIMtUpbQYwD2jBWuCWUceWjT1N6Ab6YsAznmC20DLww59FuB9tKfKYc6QKg6nANBCJ8+hZQyvpgzHkcBroAX6S6p8CFubRTvA1XUzMFqFRNCCQRWAEjfQY2FD0tUK7i/oWIEqXJdqSBJMkLUqajP4vD8FanAJ+kBoeAI7HsI5gG11oTyTuJBI0S2zsTRVbZNBokHqbLlahfhr+HK33B6Y7pHjQtLOF9KwWY9C+UfAgTzBngQWrZhwtqEI4g+YBWtwRR3ky0Hu8G9iBRZ+UFr4paF8RYc9kXyg9pk0m2ULxWazkFZpzmGSwhW4O2QrcK670GaVFwID2C4H4G+AVzzBnETUQzCstesnLKjRP4UQ0hUjGUR/QW48cpdbvYjjJNmKpuRfs8C3H83QOOGZvMYpAiqbg47M4zyv4jEhrA+2KwaPVwVcoFOLAtYnHA1vudG353v3qY5bWlLrOf7y5Pwms4dH8RF0av1DXMza3b2x7H9v9q3TAWQWt/9y+B3RqUjy6gmG1iNGpWVH4dgs7H/1Jm2GXTfNWrO8ZfedMGXZNiKRt5k6b5q0ExIz3esfRDiqiZxSlHKQPhSldZSLnqf5ATNXK4YNmQETMplS8nlc8LxT8H5Zbgabi99U69eXCa/LTK/lvpKan+p9c1Qrwd7HcK1lVTXuwoK1DdnOt2iyaXCwnWtVam+dfT1uFtLiAiwX4K6Mmq1i/D1h/FOn8OyhslXFlyJa3BkA0mYtP/YoLYyWjSZWVSBea7M2QlVxXyKmy9LnRZG+GLHPdEafK0ulCk90YskwoizhVlpzahSZ7M+SyLThVVuKcNNmTISuZ7lBQZel1ocmeDFlmlkCCKku3C032YsgysSTiVFn6o06a7MWQZWJJxKmy9IecNPkPGLKsVwGSNLkahlxBYRkiaXI1DFnmV4IETa6KIVdSWMYImlwdQ5b5FSBBk0sy5N8InmvktJGKMAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$- \\frac{- 2 \\sin{\\left (a \\right )} + \\sin{\\left (2 a \\right )}}{a - \\sin{\\left (a \\right )}}$$" ], "text/plain": [ "-(-2⋅sin(a) + sin(2⋅a)) \n", "────────────────────────\n", " a - sin(a) " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lim" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHkAAAAtBAMAAAB4y9mbAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnZmu0TviSKZVKt68wbhAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACLElEQVRIDe1VPWgUURicvTv3zmyENUUkjVyjKRPQSiEepEiRwm2SIqI5FEljYUAQETRtrGKjBEOyCLZyMUQbkQXR6kAhWKhNJKiNkKCJ/3J+392LOy8Y3exVgXzF7sw3M2/fvtvjAzYtjxTG1P4HPElaISCyGfRuxMqeEF61s2QavJS2SDIOoPDzD0Qb8AgtX00j48eKIpJigTxPgTfApNHcKDYpIskWDJsAZnwsVwy9bptYspU6KxSBJWC5ZLSD5m5uLGkrNzhQvDeN3qn5U4HQ1lCbOAY8vDMv4G6d8kWkuPYB3egBpoPcD+lmyirl1lC4hatyHKeVcolENe4jxBXgEvBZ2tnnqmUjdJTxWNCCUi6RqLJfTkDTFwFddfeYalXgmY8jgo4rbTukdVihSlTO7Vq0Me1GwE04+qOPk1WhG8klrlm0r1I6ozt/BW/2O9wVgRt3LlIlDuMF8I7S+UDOLMSuvb+QL74GRsgqUCWfWi99XNaX7my8d8siMFetLuEAzkQh8ISsAusSta6dHRrrmxzt+3Zh5NOifPLdQFet9hH7h/rfloCjZBVYl+yWxRonu97yZLGt1DnL3Fq26H9JvsKWB0wSYOc8m0aZJMH3yeRaGyFh20L+2zTxErWt10oTj9uJJjqBXj+R7a8m50NXE2lgeHukG7PPOoHkOzezL2XazL6UaTP7rLmXfOdm9qV7tmNmX8q0mX3p0uuzL2XazD5Ov5/pCZgL/g2+GsBtVkEkRAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$- \\frac{\\sin{\\left (2 a \\right )} - 2}{a - 1}$$" ], "text/plain": [ "-(sin(2⋅a) - 2) \n", "────────────────\n", " a - 1 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lim.subs(sympy.sin(a), 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Approximation\n", "\n", "SymPy has built-in support for taylor series expansion" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\sin{\\left (2 \\right )} + \\left(x - 2\\right) \\cos{\\left (2 \\right )} - \\frac{\\left(x - 2\\right)^{2} \\sin{\\left (2 \\right )}}{2} - \\frac{\\left(x - 2\\right)^{3} \\cos{\\left (2 \\right )}}{6} + \\frac{\\left(x - 2\\right)^{4} \\sin{\\left (2 \\right )}}{24} + \\frac{\\left(x - 2\\right)^{5} \\cos{\\left (2 \\right )}}{120} - \\frac{\\left(x - 2\\right)^{6} \\sin{\\left (2 \\right )}}{720} + O\\left(\\left(x - 2\\right)^{7}; x\\rightarrow 2\\right)$$" ], "text/plain": [ " 2 3 4 \n", " (x - 2) ⋅sin(2) (x - 2) ⋅cos(2) (x - 2) ⋅sin(2) \n", "sin(2) + (x - 2)⋅cos(2) - ─────────────── - ─────────────── + ─────────────── \n", " 2 6 24 \n", "\n", " 5 6 \n", " (x - 2) ⋅cos(2) (x - 2) ⋅sin(2) ⎛ 7 ⎞\n", "+ ─────────────── - ─────────────── + O⎝(x - 2) ; x → 2⎠\n", " 120 720 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nonlinear_expression = sympy.sin(x)\n", "sympy.series(nonlinear_expression, x, 2, 7) # taylor expansion in terms of the x variable, around x=2, first order." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To remove the order term use `.removeO()`" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMkAAAAVBAMAAAAeFNdiAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInZUiRDNmWbvRN27qzJGkhbKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADL0lEQVRIDXVUS2gTURQ903TyzxgFraUKsSq4KQTpRlwYobgrBhfqokhALIIFgxRTFSG60E0XdSFaoTWoiMWFKS66CGoVuhBqKYIoumgWurLQVqr1UxrPe/Nm3qSdXMjMvefcc+7MzcwASKJBNCJs3Gig0rDqkO1NaY3XZw/qS6dSgmjKARqdd9uEtOn0azIKfVU0mE9By8UZQJnUyY27ugxk4NqYOY3rbCea/wJnNKAzCoxZHC0hmNWgk0VXnAw4Drg2oaLGdfYBGAZuakBnFCSyiAwhnFfgE03CM3kAcG0inhad3s9iLomIR+NyFER+IrEE3FbYfperS4YA1+ZxHeMUX4C5KoJFp/acKUiUkVgDzirUf0o0B7g2/Ww91nGqK+0xkukroHmWmdlP7kT7ZVj72nOshQCILQLdMgPUFMFvG8H3O1s6UmRCGUnbNuKC8k3vQ2WJ6YP1AwjnWLemo6PWOOKpHkA02XewkAJusBKhpkj+BTCSsrhOtQhl85xmyaalRFH0eyKWBwLCtReBW7EMrLWxLDKsKWBM8HdQZu4Uyb8D3gK/ycTSglY29wAL8ZxAzHMVEVWRo8CftUhwmckCFcux1V2CoIDryPOwILIrlcpwpcJbgOQ5ZRrgHhAp8eDYSNGmlEC8IR/T6BAnCcWhErBqHqkJbymQz/iYEqiNSX7dFMfmtGh9ljSzSqJOnTCScmOmeM/EvaxsxUk+WBACvtabN2xM8npKkBo4Nm+AntIcmgl5wsqgKYvwJKFemkbyiK7xkj+xpgBfgb3AIDMR6l4kr6fEU1yEY9PNfXy7hIey3z20FQp81kNsRGsRh61RBDMHsnjNmgJjonC1DFxQ7WqK5KeBPvt/Ea+Ba/MUfBkCA+L2PHG+VvvF/zNJyPzYlURL12c8ur6nxJqCYK1WywHjrESoKYKfH56a/zMz+I8TomXAtYlVZafvoc0PdQUGbWSoKeubXzoAbeRT4NTrzvzebQxXwM+mHd6vpaff/dYKG7Fr/zAmfXFHsMOX1WBc7JshbfhhaBDxrC/hCKZ8WQ2ak3YubYyiJuqza/WlUylBWF2qA288b7ch2vwHgDjTEE5Y9vgAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left(x - 2\\right) \\cos{\\left (2 \\right )} + \\sin{\\left (2 \\right )}$$" ], "text/plain": [ "(x - 2)⋅cos(2) + sin(2)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp = sympy.series(nonlinear_expression, x, 2, 2)\n", "temp.removeO()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You will also notice that SymPy's default behaviour is to retain exact representations of certain numbers:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACYAAAAVBAMAAADY/YGeAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMom7q0QizZkQVN1mdu8ilFydAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA7klEQVQYGWNggADG/yDwAcqDUMwCKFwwRxhTiMEVU4ytAFOMIwBTbDoDQ0a7Iap4FwObA4M+imLODQwsExj4HiArZDrAwPeTgeUbTGwpkMHNwMACVPoRKsb7HMi4C+Zwf2C4B/TgD4ZMfaCvNoDF5C8wqS6SuQjkz3dg4LkAFtvBIMVwjRcoxMDxjYF7AkiMowFIGADtZ2Bg+8GwCEgxMJwAYkYHoHVAYD+hEkRxKTCkMXAs4AexGeJvNYAoIQaGmwzzJ/AHgDjszxOAJNuOjpYNDNcZ+BSAHAauLyCSHeiyAgYrBhYFEI9hG5hEEACHCDdc/3tjRQAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\sqrt{2} \\pi$$" ], "text/plain": [ "√2⋅π" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "number = sympy.sqrt(2)*sympy.pi\n", "number" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To convert the exact representations above to an approximate [floating point](https://en.wikipedia.org/wiki/Floating_point) representations, use one of these methods. `sympy.N` works with complicated expressions containing variables as well. `float` will return a normal Python float and is useful when interacting with non-sympy programs." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKsAAAAPBAMAAABpSyLSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndq3ZmzYkiRO+7EFRAb64nAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACz0lEQVQ4EaWUXUgUURiGn11nbWfX3SQiuomWwRQKUiSiiyxTiyBqxQy6iRbB7qKFugmMtiAyiFzsh4KgJYLuKqgbK8uKiIxw+qOiwL0MurBfrPyZvvOdMb1vLr53vnneec+Zcw4D/3FF4P2c1929cxpYEHaqUvrrHsC7ncshdexoCdfrqQavxofzR4dDQqQJkuP7m6xHSToIgonZ5FXhreoq3Gb6SmRwykRhG2eI/+FVe2SAVIZ9ZUte101Bxfo1vvUoiR/wvHX/YmNhrKoUxyd5ozJHKs8eeMtWuMMWeEhsmtG8JcQk1jEZ6lEik3Az/2IXHbC3qlKSUzi/40Mm9qSJve+TLY5DH4nbzM9bMhurHiXpcCAbVwhjVaU4DThfE5N+NMf159TSCtklk7BbVpixnCWzsepRIuWIjZQaK9pY1bCp+EL250oZPOgoG+N6zGxLkFgtYxhiY7s7qmc8huAOwZvOF71lOIeNVQ2bpe3Eg4Pi6xsvSo38NGs7kiPSuYGQmLWt8t0/oUcJTgkysY3RBiiEsaph0wifLgYl0idG5D0qMnwoRbJluR0rW6Kzlf7RjMcQLkFlMfbbyYnYWNWwiWaozDA2SBfpCTmunpzgZad0bZNTlszE1hdDj9lpjsuXUZWX4c5iY1XDpktOuo87zaBMoGyGMFe9H6mmatoSjX0iD6vVowTWGt/8dilX2tomNs+obdIFLozKo02pL7JrOT7hFqXtYXRKYpXYLbsp+2c9Skj9EBvXiynf6C1T5FKVshh2JSXoKQOyLcVIgZj/2Xe/kmyWT7VEZ1uAu9ajhMQ3+FjKEte4SVJyfkDOpiluo1fTkDhEZTtXfbo57XmtbPerZB9y5twq0dh+YoPWo4T0L9nTJSu4ZoLqgsfI1quaMk/+GHkWestl/Vu8EoeDYJx4r7Rc9oaxxHn2faP8hFp867HEvQcvd6Rry/wFk+8VHKw3SE8AAAAASUVORK5CYII=\n", "text/latex": [ "$$4.44288293815837 x$$" ], "text/plain": [ "4.44288293815837⋅x" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.N(number*x)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPBAMAAACGiUnsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndq3ZmzYkiRO+7EFRAb64nAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACxklEQVQ4EaWUTUhUURiGn9FxnDt/Tr+0iYaLJUikiESb0FQi6EexFm3CQbBdZD8EgaEIgkHkoBUFQUMFLVok1MZKtCIqIbzUosKFswxaqAsd8u/2ne8eadWqs3hevnfuee/xO98V/mOF4Mc/t2+2v6gKhqvewPfT1RaO25MGt9KDu/1T1mSLlPHipYMkB/rzOIN785IyOChPKqDepqrW4zQylCdDuBDgFtFlvraFxkhmOB+YyaZeSS1tOOBRAif4QmQdRvLh2gBQZlNVBWGP+GgkS7JbwXF4xVF4S9k6s9akQ1LD5jhn4RsdhWQRLpKYDADbLwdnVRXE1wj/jk5KqoIJj9ac7Bki9pIKa/5NvWFSn+YpklqTIIVon01VFchfEV6IrXolWQXN0LpzFTqkZ8xZ82/qs8/sMWlLlI+KKqQBuSBV1Ral87Qu7pM0A1kNchLTbGL7N0ztQFd7mrDfXpBHHmWpuDBQHQDuEKSq2mJXG1H/KgEgtGj6Op0ldOrQhmlSE56zLG8r5mBbS5rZK8QLCmmATVW1RR38vO/nA8hdZ5jJh1rNkeYK1jSpst6Ruj4t0aTkJucpGVcQyQWpqrYoyRDJMDeukB0uJHff1L7G16xpU2tynaRWzBsmvIpaIssKbhOkqtqiUwbcw1lXYN5gVo0XSpPYME3qBzHT4/CgsEkaVCjtJrKk4HFLy8oR2aMaFKk+7s2KdVghzcCRztHD7JqkWtOkPperS87L3J7zPUlNmLMq5GleGMhSFeyAM3HJ+aQg1EeZ98tzFog3yjAHpk5WH7xmTG4tJ7smvJj0dVRh0lYxH4ZRhVPnVtbGrhFpUzDius2c9BJZ5FuTeTW/yPTKWYcpG+eJR5d8YDKvfGSmEACq/PfIpasalPu+381Wt5oAvb5fJDooJQ/dKWsem6hvw3GbPEJNbp6Ya/67RF0zeII/4b0itW/kSlAAAAAASUVORK5CYII=\n", "text/latex": [ "$$4.442882938158366$$" ], "text/plain": [ "4.442882938158366" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(number)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solving equations\n", "\n", "Sympy can help us solve manipulate equations using the `solve` function. Like many solving functions, it finds zeros of a function, so we have to rewrite equalities to be equal to zero, \n", "\n", "\\begin{align}\n", " 2x^2 + 2 &= 4 \\\\\n", " 2x^2 + 2 - 4 &= 0\\end{align}" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.plot(x**2 + 1)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAVBAMAAAATJmVgAAAALVBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAdt0yiUQQzauZu+9UZvf1EgYAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAB+SURBVCgVYxBSZiAEgEpcCakByrsiq2JWw6LDKAFVVcb0Zxiq2Drr0FQxMGKqYmCQGxaq0pVAABgFA+NHNvTgxxqqeQVoytBVcax+1MjAhBbjXfs0BFDTBNiUY2hmgbgoKQcs7wAmUQkMVWwCqArAPAxVvFgUAW10IiLdbwUAhmYmOEsehH8AAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left [ -1, \\quad 1\\right ]$$" ], "text/plain": [ "[-1, 1]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solutions = sympy.solve(2*x**2 + 2 - 4)\n", "solutions" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAOBAMAAADH1sFNAAAAIVBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdcGRXAAAACnRSTlMAEM3dMquZdrvvHSJQDQAAAAlwSFlzAAAOxAAADsQBlSsOGwAAACZJREFUCB1jYIABFkMYi4FBNGkhgsPATg2OkDEImDBQbBpr5+JwAHRPC1OtyQ5cAAAAAElFTkSuQmCC\n", "text/latex": [ "$$-1$$" ], "text/plain": [ "-1" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solutions[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use `sympy.Eq` to construct equations" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGgAAAAVBAMAAABYjraNAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpnNuzKriUQQ7912ZlSugimNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABi0lEQVQ4EZ2SP0jDQBTGv1QS+58oxUXFkoJLHRzE1UEEB4dSkE5ip0op0kwugjq5CcVFunVy6NLSoSAZ7CQIgujmIuLi4tCihSqF83p3Sa6lheBb3vd+3/tyuRDAraujvDt4VXEkva66ez0spdzJo3r5Twg49vh4xVhz3km9GQnNJrZGCB3TwByme7YRK9mKdyWL07NhRKcmQL9yVXAlq+pcXvCmlRCsCNNpYRqqlVAUq7HdtDjqk68Ef6B1nG0h9taBAlBM8blGiDBESKtD646GTBqidYvAQz5zIrkiREmoLeGBDOsspPbhw11L/hvc0H6LLvosVlkqsQgWCsXxhEf9cIBEuaGGjexu8pABpLBpQyBpWVXLajLgi7ucqYjOQhHG+0Omc9LzEKbDAljoA4oOfwdlybdDURMzFEt3Os/lfg+gmgiXt7U2zDGhDHAvYS6vgXnDKES7lxX/m+SKk5SGsVyXMJffwAYhX4GV1vurbIrQFCFkVeYDnSA7o4jP9p3GuxOo+GEnuPgDY1JeN7qyYAsAAAAASUVORK5CYII=\n", "text/latex": [ "$$2 x^{2} + 2 = 4$$" ], "text/plain": [ " 2 \n", "2⋅x + 2 = 4" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "equation = sympy.Eq(2*x**2 + 2, 4)\n", "equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The roots function will give us the multiplicity of the roots as well." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIwAAAAVBAMAAABmhxuGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEER2zVSJ3ZkiZjKru+/kt61jAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVQ4EWNgYGBUYqAITJ0A1m4SSJEpDNxnBYAGsH5ENmU7SAgGuAthLCQaUwXvAaA0WwFCDeMJfyRjZFpQbAArw6YCbAKyMQwM9kjGMDBjGoNNxVAxpgIcEPg8haQC7CkOB0QQw3zO+IWQMcgqmB8AVc9fANYCJaBBDAlofK5BUsH5lYFhTxHQAEb3chDYAHMN1Ex8xkCUQFTMdWVgbEGOYrIinCFFgYEBnAah1pPnGtafQO0Ekh8j3AYoAzOBsj3AYQxSPMg7QLXDKIgxSCogDkFxzdn3NQYg9eBUwXPv+2EGdrTsiakCizEwK5HoQCQ2diaWPIWpMAFTCE0EbAw4DaJJIHEZwZ5EEsBkgvMB41NMCSQRLiQ2DqbcApDEjKM4pIkU3gbUDwCI2lTZJmordAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left \\{ -1 : 1, \\quad 1 : 1\\right \\}$$" ], "text/plain": [ "{-1: 1, 1: 1}" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.roots(equation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are given as a dictionary. If this is not familiar to you, have a look in the [Extra Python notebook](0_Getting_Started/Extra%20Python.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also solve systems of equations by passing a list of equations to solve and asking for a list of variables to solve for" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH4AAAAVBAMAAAByPkciAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEER2zVSJ3ZkiZjKru+/kt61jAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABkElEQVQ4Ec1TO0sDQRD+Nkcubw2kEXwFwdqAFilE0tgn2GsKsfbRWAa8ykLSCDZifoI2VoKBYDrRHyASEHsDisTKmdk77/buIJDKhbud+R47u3N7ANQSJhvnbfGtNSazI/dYJGdyGLXnDqKYiYii0CXQ3jcZyuacmDUNlVaINcYPa5xfK/6Pv7Q+u1enE6ZacsyY/ZdOoLpMHvsK2X+6RkDL6qW5j4ucIO78zW1kP4hSn77CGlB81QGybWuUpxmKHhrR+pm6g/wzc0V+aUXmC7g7pCyHQo1Rb0T9Cm+Yqni8V+FyE8qRBacDnMf6aooSQ9xf+4iusFsG5BJhpa1kHa2I1ge1acO36/0nR4RwE+fLT7BDrNsKD6UyL15Ms1SwBxSxf+fmDMvMBvrvhozySHcTPzwH+/93/2ZWk6d1ZvX3z79+95Ay/yHVr/Ju3e8vCv3ryCLChF6NUG7XQsAYf9OQO1iQHQZBKS2XKIi6saoY4BH6Rs6JXF31HsEFyJrwVrVsApQtdBi6eOD3BOOWjL9PWFzSZxjNUwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left \\{ x : 1, \\quad y : 1\\right \\}$$" ], "text/plain": [ "{x: 1, y: 1}" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = sympy.symbols('x, y')\n", "sympy.solve([x + y - 2, \n", " x - y - 0], [x, y])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This even works with symbolic variables in the equations" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOUAAAAyBAMAAABR3AGyAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIrt2EIlmRJmrMu/dzVR9PQywAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEK0lEQVRYCb1YTYgTSRT+kunYyUwmiT8HBdG5LbuL2BAFPU2DHhxUEpibqIm3PSy7c9rTwjQqGPFvUPEkGA+ePMyooKCjzkXwp9Xgnjw5IsLCXuLu+MOAjlXVVdVWT1JVo3ELpuq9V9/3vky6X3VeA2SsGKLz/zAue0Kk719fmN95dadLXKFWt5BKNZ41LWBdIIK9+0oEcD90ASrhNci8VwJLcgTbuRrR0m0d3a1Hu2eBWzpcl70/EuxakwWKQ1G881zgl/2ujwviYnRGdoy+iqKSPRmlq0x0RPOg0DwPXGjqgJ33uKZkrw8YrhItCU6mvIdFhCZxniYgGlewwTUlm4t11Ew9wUGWM9bs/08jom5JdqzJ2TrNfBXXEpr5QE2s8SQ71uRsneYpn6bMhuGj6TCMLnhDI8K3dod0PETExvEwvBWGD9gmZ+s0eR0B8rtdFpg1BUKy5f8p2BpN562gS83XSNnWSsyWmoKt0cQ7wGWyQrO/ij5ffBDTKtlCU7J1muTrV2tlbaNBisxySLbQlGydZma07DMB8X++WFj4aKkISLbQlGydpkwvNGVgaUZ8JkQ8K01xxi9NSqL5GS99K02J7o3BD/fJam/SWWXhD7HhMSt0b0CDbZZnms5O+eyl/dTIB3S2HM4WDyMUa80qkNIlZyr7iZLFVu84dSstOluOTGEKv1OsPetUicCPNSnpAIZL56jh0Ml2rMu2cJqC7VnZG8CugAk0sYGtfCoudBxfQqjtD3j8kcd2urBEqoj9j4ddhyMT9k9kTqDLuN8//4VrY/7pie8W7htst6GomBPom1IjJi97kyDYPeT8kGujasKTfV/F/Ij0hBoxebUmRTwmf4X5HVPuLDEMd6CTOOePYrxuZlEEHy6rFdAzwTnk/f0bCxsqLfQFm60jo+zet69P/gNec/aJNiPWKaiawL54T7FWn/gJzs8zSow4xRaL8KM+uUt90WbEe5nYJFa25dxRAtJJTaA2hsFABrjBz3iN5uImZZuSJO/lqkpAOjkfA1MozsoAN8zPMtlmSGpdWtQolI8ofuwMzCH3hpRvHIkss6ZsM5JUo5+bQW4eexfhzJqEQpqU1aMrF3EtAvk2npdPJoA2mqTNcK9go5+g2riTnvPRr5RUqI0mKdeddbCnnEo2e/dRmEPRU4E2mg3Q5uOeSrTysgEpJVQS97WFJm0zrsL5mjcJv4CW5/is+gEtNEmbseotlrVVoo1XqGJ5sS46NMkwa9I2Y/snpFsvJcnWuARsKo451xN4oTmRiMcuazP+wq9B4qrEiG5W6n7j6Eyung4SALMmazNGNl8800xQje4g+UHScg4lyxP8HUZxyJihdwD+EEvP9S6lMdNwk0H6ZU9tZHwzwLnNU9RmvzmXbQLxjhF9Vi8ZbdPqcG5YEtsrhoT1ndfonfFn1LdCEi1T7G8AAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left \\{ x : \\frac{c + 2}{2 a}, \\quad y : \\frac{- c + 2}{2 b}\\right \\}$$" ], "text/plain": [ "⎧ c + 2 -c + 2⎫\n", "⎨x: ─────, y: ──────⎬\n", "⎩ 2⋅a 2⋅b ⎭" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a, b, c = sympy.var('a, b, c')\n", "solution = sympy.solve([a*x + b*y - 2,\n", " a*x - b*y - c], [x, y])\n", "solution" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }